home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Nebula 2
/
Nebula Two.iso
/
SourceCode
/
GameKit
/
Examples
/
PacMan
/
PacManGameBrain.m
< prev
next >
Wrap
Text File
|
1995-06-12
|
3KB
|
103 lines
#import <gamekit/gamekit.h>
#import "PacManGameBrain.h"
#import "PacManView.h"
#import "Player.h"
#import "PacManPreferencesBrain.h"
#import "FruitView.h"
#import <stdio.h>
#import <string.h>
// fruit values
static long fruitval[NUMFRUITVALS] = { 100, 200, 300, 300, 500, 700,
700, 1000, 1000, 2000, 2000, 3000, 3000, 3000, 3000, 5000 };
@implementation PacManGameBrain
- nextLevel // we add fruit basket's display of the level to this
{
[super nextLevel];
[fruitBasket showLevel:level];
return self;
}
- makeGameInfo
{ // This could be replaced by using the GameInfo palette. I'm not using
// the palette yet since the GameInfo object may change, and then trying
// to load the .nib might crash until I add versioning in the read and
// write methods...
id info = [super makeGameInfo];
// Set up for the sound in our game; 2 types with 3 sounds each.
// 2 streams is enough to overlap the sounds a little without them
// getting too delayed.
[[[info setnumSoundTypes:1] setnumSoundStreams:3] setnumSounds:6];
// Giving three pacs to begin with.
[info setNumOneUps:3];
// highscores: only five per user on the network server:
[info setMaxScoresPerPlayerTable:0 net:YES to:5];
return info;
}
- appDidInit:sender // after init, but before 1st event.
{ // Allocate the bonus trackers and a frame for the PlayerUpView
id xtraManTracker = [[BonusTracker alloc] init];
id ghostTracker = [[BonusTracker alloc] init];
id fruitTracker = [[ArrayBonusTracker alloc]
initForBonuses:fruitval count:NUMFRUITVALS];
NXRect pacFrame = {{PAC_WIDTH * 2, PAC_WIDTH}, {PAC_WIDTH, PAC_WIDTH}};
[super appDidInit:sender];
// set up bonus trackers for eating ghosts and getting extra men
[xtraManTracker setBaseValue:10000]; // first xtra man at 10,000 pts.
[(BonusTracker *)xtraManTracker setIncrement:15000];
// next xtra every 15,000 pts...
[ghostTracker setBaseValue:200]; // first ghost is worth 200 pts.
[ghostTracker setMultiplier:2]; // each ghost is worth 2x previous
[gameScreen setGhostTracker:[scoreKeeper addBonusTracker:ghostTracker]];
[gameScreen setFruitTracker:[scoreKeeper addBonusTracker:fruitTracker]];
// configure the PlayerUpView
[oneUpView setImage:[NXImage findImageNamed:"Pacs.tiff"]];
[oneUpView setImageFrame:&pacFrame];
[oneUpView setMargin:8.0];
[oneUpView setExtraManBonusTracker:xtraManTracker];
// Set up the FruitBasket window to autosave it's location.
[[fruitBasket window] setFrameUsingName:"FruitBasket"];
[[fruitBasket window] setFrameAutosaveName:"FruitBasket"];
[fruitBasket showLevel:1];
return self;
}
- layerWindows
{
// make sure the windows are layered properly
// Fruit Basket is to be on the bottom, so order it front first.
if (![[fruitBasket window] delegate] ||
[[[fruitBasket window] delegate] windowUp])
[[fruitBasket window] orderFront:self];
return [super layerWindows];
}
- windowDidMove:sender // move fruit basket and status with game window
{ // we completely override super's method, since the window goes to
// a totally different spot... (lower left rather than upper left, and
// we have to move two windows instead of just one.)
NXRect gameFrame;
[gameWindow getFrame:&gameFrame];
[[fruitBasket window] moveTo:(NX_X(&gameFrame) - 137)
:(NX_Y(&gameFrame) - 53)];
[[levelText window] moveTo:(NX_X(&gameFrame) - 137)
:NX_Y(&gameFrame)];
return self;
}
@end